// ‘\0’和‘0’的区别。有一个共同点就是它们都是字符，在c语言中，字符是按其所对应的ASCII码来存储的，一个字符占一个字节。请翻开你的ASCII字符集表吧，一般在你的C语言教材的附录上，没有的话网上查查哦。请看第一个ASCII码，对是0，对应的字符是（Null），其实就是‘\0’，即空字符。判断一个字符串是否结束的标志就是看是否遇到‘\0’，如果遇到‘\0’，则表示字符串结束。而字符‘0’对应的ASCII码是48，48对应的十六进制数就是0x30，通常我们在编程的时候，用字符转化为数字的时候经常要用到，比如要将‘8’转换为数字8，在语句中这样写就可以了，“
// 8+‘0’”。这里的8就是数字。字符‘0’和数字0的区别：前者是字符常量，后者是整形常量，它们的含义和在计算机中的存储方式截然不同。但是字符常量可以像整数一样在程序中参与相关运算。
//       “0”和‘0’的区别。首先“0”是字符串常量，字符串常量是由一对双引号

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
  char cval,
      char_before =
          '\0'; //计算机中的0值表示的为'\0',可防止它的初始值(随机的)碰巧是某个字符的值.
  int char_a = 0, char_e = 0, char_i = 0, char_o = 0, char_u = 0, sum_space = 0,
      sum_table = 0, sum_newline = 0, sum_ff = 0, sum_fl = 0, sum_fi = 0;
  while (
      cin >> std::noskipws >>
      cval) // 此处的std::noskipws表示的是不忽略任何地方的空白（包括制表符和空格等）
  {
    switch (cval) {
    case 'a':
    case 'A':
      ++char_a;
      break;
    case 'e':
    case 'E':
      ++char_e;
      break;
    case 'i':
      if (char_before == 'f') {
        ++sum_fi;
      }
    case 'I':
      ++char_i;
      break;
    case 'o':
    case 'O':
      ++char_o;
      break;
    case 'u':
    case 'U':
      ++char_u;
      break;
    case ' ':
      ++sum_space;
      break;
    case '\t':
      ++sum_table;
      break;
    case '\n':
      ++sum_newline;
      break;
    case 'f':
      if (char_before == 'f') {
        ++sum_ff;
      }
      break;
    case 'l':
      if (char_before == 'f') {
        ++sum_fl;
      }
      break;
    }
    char_before = cval; //将当前的字符赋给char_before，作为下次判断的依据
    //如果下次判断中char_before为f字符，那么只要再判断当前字符是否为f、l、i即可
  }
  cout << "元音字母a的个数为：" << char_a << endl;
  cout << "元音字母e的个数为：" << char_e << endl;
  cout << "元音字母i的个数为：" << char_i << endl;
  cout << "元音字母o的个数为：" << char_o << endl;
  cout << "元音字母u的个数为：" << char_u << endl;
  cout << "空格的个数为：" << sum_space << endl;
  cout << "制表符的个数为：" << sum_table << endl;
  cout << "换行符的个数为：" << sum_newline << endl;
  cout << "字符序列ff的个数为：" << sum_ff << endl;
  cout << "字符序列fl的个数为：" << sum_fl << endl;
  cout << "字符序列fi的个数为：" << sum_fi << endl;
}